package online;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Customers {
    private static String connectString = "192.168.200.20:2181";
    private static int sessionTimeout = 60000;
    private ZooKeeper zk = null;

    // 创建到zk的客户端连接
    public void getConnect() throws IOException {
        zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            public void process(WatchedEvent event) {
                // 再次获取所有商家
                try {
                    getShopList();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    // 获取服务器列表信息
    public void getShopList() throws Exception {
        // 1获取服务器子节点信息，并且对父节点进行监听

        List<String> shops = zk.getChildren("/meituan", true);
        // 2存储服务器信息列表
        ArrayList<String> shoplist = new ArrayList();
        // 3遍历所有节点，获取节点中的主机名称信息
        for (String shop : shops) {
            byte[] data = zk.getData("/meituan/" + shop, false, new Stat());
            shoplist.add(new String(data));
        }
        // 4打印服务器列表信息
        System.out.println(shoplist);
    }

    // 业务功能
    public void business() throws Exception {
        System.out.println("客户正在浏览商家 ...");
        System.in.read();
    }

    public static void main(String[] args) throws Exception {
        // 1.获取zk连接 （客户打开美团）
        Customers client = new Customers();
        client.getConnect();
        // 2.获取/meituan的子节点信息，从中获取服务器信息列表（从美团中获取商家列表）
        client.getShopList();
        // 3.业务进程启动 （对比商家，点餐）
        client.business();
    }
}
